import axios from 'axios'

// 判断运行环境
const isDev = process.env.NODE_ENV === 'development'

// 后端 API 基础地址
const baseURL = isDev ? 'http://localhost:8086/api' : '/api'

const service = axios.create({
  baseURL: baseURL, // 使用环境判断的后端服务地址
  timeout: 5000
});

// 在开发环境下打印环境信息
if (isDev) {
  console.log('=== 环境配置信息 ===');
  console.log('当前环境: 开发环境');
  console.log('API地址:', baseURL);
  console.log('==================');
}

// 请求拦截器（添加JWT token）
service.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(  
  response => {
    // 检查响应状态
    if (response.status >= 200 && response.status < 300) {
      return response.data;
    } else {
      // 处理非2xx状态码
      const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
      error.response = response;
      return Promise.reject(error);
    }
  },
  error => {
    // 增强错误处理
    if (error.response) {
      // 处理401未授权错误（token过期或无效）
      if (error.response.status === 401) {
        // 清除本地存储的token和用户信息
        localStorage.removeItem('token');
        localStorage.removeItem('user');
        // 跳转到登录页面或显示登录弹窗
        if (window.location.pathname !== '/') {
          window.location.href = '/';
        }
        // 触发全局事件通知组件更新状态
        window.dispatchEvent(new CustomEvent('token-expired'));
      }
      console.error('API Error Response:', error.response.status, error.response.data);
    } else if (error.request) {
      // 请求已发出但没有收到响应
      console.error('API Error Request:', error.request);
    } else {
      // 其他错误
      console.error('API Error:', error.message);
    }
    return Promise.reject(error);
  }
);

export default service;